package com.lnt.java.thread;

import com.lnt.java.thread.executor.ExecutorTaskDemo;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * <p>线程池使用</p>
 */
public class ExecutorDemoTest {

    /**
     * 使用线程池的步骤
     * 1.创建线程池
     * 2.创建Runnable接口子类实现类,也就是task任务
     * 3.提交Runnable接口实现类，也就是task到线程池中
     *
     * @param args
     */
    public static void main(String[] args) {
        // 1.创建线程池
        // 创建fixedThreadPool线程池(固定线程数线程池),线程池规模不变
//        ExecutorService pool = Executors.newFixedThreadPool(3);
        // 创建cachedThreadPool线程池(缓存线程池),如果当前线程池超出了处理需求，就会回收空闲线程，如果需求增加，会自动增加线程
//        ExecutorService pool = Executors.newCachedThreadPool();
        // 创建singleThreadPool线程池(单线程线程池),
//        ExecutorService pool = Executors.newSingleThreadExecutor();
        // 创建scheduledThreadPool线程池(固定长度的线程池),但是以延迟或者定时的方式来执行
        ScheduledExecutorService pool1 = Executors.newScheduledThreadPool(3);
        // 2. 创建Runnable接口子类实现类
        ExecutorTaskDemo task = new ExecutorTaskDemo();
        // 3.提交Runnable接口实现类到线程
//        pool.submit(task);
//        pool.submit(task);
//        pool.submit(task);
//        pool.submit(task);
//        pool.submit(task);
        while (true) {
            pool1.schedule(new ExecutorTaskDemo(), 5, TimeUnit.SECONDS);
        }
    }
}
